home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
intuisup.lha
/
Intuisup
/
source.lha
/
Editor
/
subs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-05
|
7KB
|
376 lines
/* $Revision Header *** Header built automatically - do not edit! ***********
*
* (C) Copyright 1991 by Torsten Jürgeleit
*
* Name .....: subs.c
* Created ..: Sunday 22-Dec-91 21:23:09
* Revision .: 0
*
* Date Author Comment
* ========= ==================== ====================
* 22-Dec-91 Torsten Jürgeleit Created this file!
*
****************************************************************************
*
* Subroutines
*
* $Revision Header ********************************************************/
/* Includes */
#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"
/* Draw box in given window */
VOID
draw_box(struct Window * win, struct Box * box)
{
struct RastPort *rp = win->RPort;
SetDrMd(rp, (LONG) COMPLEMENT);
Move(rp, (LONG) box->bo_X1, (LONG) box->bo_Y1);
Draw(rp, (LONG) box->bo_X2, (LONG) box->bo_Y1);
Draw(rp, (LONG) box->bo_X2, (LONG) box->bo_Y2);
Draw(rp, (LONG) box->bo_X1, (LONG) box->bo_Y2);
Draw(rp, (LONG) box->bo_X1, (LONG) box->bo_Y1);
}
/* Draw box in given window with border of 1 pixel */
VOID
draw_box_with_border(struct Window *win, struct Box *box)
{
struct RastPort *rp = win->RPort;
SetDrMd(rp, (LONG) COMPLEMENT);
Move(rp, (LONG) (box->bo_X1 - 1), (LONG) (box->bo_Y1 - 1));
Draw(rp, (LONG) (box->bo_X2 + 1), (LONG) (box->bo_Y1 - 1));
Draw(rp, (LONG) (box->bo_X2 + 1), (LONG) (box->bo_Y2 + 1));
Draw(rp, (LONG) (box->bo_X1 - 1), (LONG) (box->bo_Y2 + 1));
Draw(rp, (LONG) (box->bo_X1 - 1), (LONG) (box->bo_Y1 - 1));
}
/* Draw box in given window with offset */
VOID
draw_box_with_offset(struct Window *win, struct Box *box, SHORT xoffset,
SHORT yoffset)
{
struct RastPort *rp = win->RPort;
SetDrMd(rp, (LONG) COMPLEMENT);
Move(rp, (LONG) (box->bo_X1 + xoffset), (LONG) (box->bo_Y1 + yoffset));
Draw(rp, (LONG) (box->bo_X2 + xoffset), (LONG) (box->bo_Y1 + yoffset));
Draw(rp, (LONG) (box->bo_X2 + xoffset), (LONG) (box->bo_Y2 + yoffset));
Draw(rp, (LONG) (box->bo_X1 + xoffset), (LONG) (box->bo_Y2 + yoffset));
Draw(rp, (LONG) (box->bo_X1 + xoffset), (LONG) (box->bo_Y1 + yoffset));
}
/* Get head of EXEC list */
VOID *
get_head(struct List *list)
{
struct Node *node = list->lh_Head;
/* Check for empty list ? */
if (!node->ln_Succ)
{
node = NULL;
}
return ((VOID *) node);
}
/* Get tail of EXEC list */
VOID *
get_tail(struct List * list)
{
struct Node *node = list->lh_TailPred;
/* Check for empty list ? */
if (!node->ln_Pred)
{
node = NULL;
}
return ((VOID *) node);
}
/* Get next node of EXEC list entry */
VOID *
get_succ(struct Node * node)
{
/* Check for end of list ? */
node = node->ln_Succ;
if (!node->ln_Succ)
{
node = NULL;
}
return ((VOID *) node);
}
/* Get previous node of EXEC list entry */
VOID *
get_pred(struct Node * node)
{
/* Check for start of list ? */
node = node->ln_Pred;
if (!node->ln_Pred)
{
node = NULL;
}
return ((VOID *) node);
}
/* Get node from list by given number */
VOID *
get_node(struct List * list, USHORT num)
{
struct Node *node;
if (node = get_head(list))
{
while (num-- && (node = get_succ(node)));
}
return ((VOID *) node);
}
/* Duplicate text string */
SHORT
duplicate_string(BYTE * text, BYTE ** ptr)
{
LONG len;
SHORT status = EDITOR_STATUS_NORMAL;
if (!text || (len = strlen(text) + 1) == 1)
{
*ptr = NULL;
}
else
{
if (!(*ptr = (BYTE *)malloc(len)))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
CopyMem(text, *ptr, len);
}
}
return (status);
}
/* Convert string to lower case */
VOID
lower_string(BYTE * text, BYTE * ptr)
{
if (ptr && text)
{
BYTE c;
while ((c = *text++) != '\0')
{
*ptr++ = tolower(c);
}
*ptr = '\0';
}
}
/* Convert string to upper case */
VOID
upper_string(BYTE * text, BYTE * ptr)
{
if (ptr && text)
{
BYTE c;
while ((c = *text++) != '\0')
{
*ptr++ = toupper(c);
}
*ptr = '\0';
}
}
/* Duplicate text list */
SHORT
duplicate_text_list(struct Template *old_tp, struct Template *new_tp)
{
struct Node *node;
SHORT status = EDITOR_STATUS_NORMAL;
NewList(&new_tp->tp_TextList);
for (node = get_head(&old_tp->tp_TextList); node &&
status == EDITOR_STATUS_NORMAL; node = get_succ(node))
{
status = add_template_text_list_entry(new_tp, node->ln_Name);
}
return (status);
}
/* Build template text list from given text array */
SHORT
build_template_text_list(struct Template * tp, BYTE ** text_array)
{
BYTE *text;
SHORT status = EDITOR_STATUS_NORMAL;
NewList(&tp->tp_TextList);
for (text = *text_array; text && status == EDITOR_STATUS_NORMAL;
text = *++text_array)
{
status = add_template_text_list_entry(tp, text);
}
if (status != EDITOR_STATUS_NORMAL)
{
free_template_text_list(tp);
}
return (status);
}
/* Build text list entry */
struct Node *
build_text_list_entry(BYTE * text)
{
struct Node *node;
if (node = AllocMem((LONG) sizeof(struct Node), (LONG) MEMF_PUBLIC |
MEMF_CLEAR))
{
if (!(node->ln_Name = (BYTE *)malloc((LONG) (strlen(text) + 1))))
{
FreeMem(node, (LONG) sizeof(struct Node));
node = NULL;
}
else
{
strcpy(node->ln_Name, text);
}
}
return (node);
}
/* Add text entry to template text list */
SHORT
add_template_text_list_entry(struct Template * tp, BYTE * text)
{
struct Node *node;
SHORT status = EDITOR_STATUS_NORMAL;
if (!(node = build_text_list_entry(text)))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
AddTail(&tp->tp_TextList, node);
}
return (status);
}
/* Free template text list */
VOID
free_template_text_list(struct Template * tp)
{
struct List *list = &tp->tp_TextList;
struct Node *node;
while (node = RemHead(list))
{
free_text_list_entry(node);
}
}
/* Free text list entry */
VOID
free_text_list_entry(struct Node *node)
{
free(node->ln_Name);
FreeMem(node, (LONG) sizeof(struct Node));
}
/* Build template text array from template text list */
SHORT
build_template_text_array(struct Template *tp)
{
struct List *list = &tp->tp_TextList;
struct Node *node;
BYTE **text_array;
USHORT count = 0;
SHORT status = EDITOR_STATUS_NORMAL;
/* Count entries in text list */
for (node = get_head(list); node; node = get_succ(node))
{
count++;
}
if (!(text_array = (BYTE **)malloc((LONG) (count + 1) * sizeof(BYTE *))))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
struct GadgetData *gd = &tp->tp_Data.tp_GadgetData;
switch (tp->tp_Type)
{
case TEMPLATE_TYPE_MX:
gd->gd_SpecialData.gd_MXData.gd_MXTextArray = text_array;
break;
case TEMPLATE_TYPE_CYCLE:
gd->gd_SpecialData.gd_CycleData.gd_CycleTextArray = text_array;
break;
}
/* Fill text array with pointers to text list entries */
for (node = get_head(list); node && status == EDITOR_STATUS_NORMAL;
node = get_succ(node))
{
*text_array++ = node->ln_Name;
}
*text_array = NULL; /* mark end of text array */
}
return (status);
}
/* Free template text array */
VOID
free_template_text_array(struct Template * tp)
{
struct GadgetData *gd = &tp->tp_Data.tp_GadgetData;
BYTE **text_array;
switch (tp->tp_Type)
{
case TEMPLATE_TYPE_MX:
text_array = gd->gd_SpecialData.gd_MXData.gd_MXTextArray;
gd->gd_SpecialData.gd_MXData.gd_MXTextArray = NULL;
break;
case TEMPLATE_TYPE_CYCLE:
text_array = gd->gd_SpecialData.gd_CycleData.gd_CycleTextArray;
gd->gd_SpecialData.gd_CycleData.gd_CycleTextArray = NULL;
break;
default:
text_array = NULL;
break;
}
free(text_array);
}